package client.controleur;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.InetAddress;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import modele.Partie;
import client.vue.Accueil;
import client.vue.CreerPartieReseau;
import client.vue.Vue;
import codebase.ICreerPartieReseau;
import codebase.IPartie;

public class AccueilActionListener implements ActionListener {

	private Accueil accueil;

	public AccueilActionListener(Accueil accueil) {
		this.accueil = accueil;
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		JButton boutton = (JButton) arg0.getSource();
		if (boutton.equals(accueil.getBoutonCreerPartie())) {
			try {

				/*
				 * String IPLocale =
				 * InetAddress.getLocalHost().getHostAddress(); String ipServeur
				 * = JOptionPane.showInputDialog(new JFrame(
				 * "Choix de l'adresse IP du serveur"),
				 * "Veuillez saisir l'adresse IP du serveur : ", IPLocale);
				 * 
				 * if ((ipServeur == null) || (ipServeur.length() == 0))
				 * JOptionPane.showMessageDialog(new JFrame("Erreur"),
				 * "Vous devez saisir une adresse IP"); else { Context context =
				 * new InitialContext(); partie = (IPartie)
				 * context.lookup("rmi://" + ipServeur + "/partie"); ....
				 */
				// On lance le serveur
				String IPServeur = InetAddress.getLocalHost().getHostAddress();
				LocateRegistry.createRegistry(1099);
				Partie p = new Partie();
				Context nomContext = new InitialContext();
				nomContext.rebind("rmi:partie", p);
				System.out.println("Serveur lancé");
				// On lance le client
				Context context = new InitialContext();
				IPartie partie = (IPartie) context.lookup("rmi://" + IPServeur
						+ "/partie");
				// on ajoute les fenetre avec la partie
				CreerPartieReseau partieReseau = new CreerPartieReseau(partie);
				Vue.panelPrincipal.add(partieReseau, "CreerPartieReseau");
				// Pour la synchro
				partie.connect((ICreerPartieReseau) UnicastRemoteObject
						.exportObject(partieReseau, 0));

				// On change de vue
				Vue.changeFenetre("CreerPartieReseau");
			} catch (Exception e) {
				JOptionPane
						.showMessageDialog(new JFrame("Erreur"),
								"Un serveur est deja lancé sur ce port, cliquez sur 'Rejoindre partie'");
				e.printStackTrace();
			}
		} else if (boutton.equals(accueil.getBoutonQuitter())) {
			System.exit(0);
		} else if (boutton.equals(accueil.getBoutonRejoindrePartie())) {
			// On lance le client
			IPartie partie = null;
			try {
				String IPLocale = InetAddress.getLocalHost().getHostAddress();
				String ipServeur = JOptionPane.showInputDialog(new JFrame(
						"Choix de l'adresse IP du serveur"),
						"Veuillez saisir l'adresse IP du serveur : ", IPLocale);

				if ((ipServeur == null) || (ipServeur.length() == 0))
					JOptionPane.showMessageDialog(new JFrame("Erreur"),
							"Vous devez saisir une adresse IP");
				else {
					Context context = new InitialContext();
					partie = (IPartie) context.lookup("rmi://" + ipServeur
							+ "/partie");

					// on ajoute les fenetre avec la partie

					CreerPartieReseau partieReseau = new CreerPartieReseau(
							partie);
					Vue.panelPrincipal.add(partieReseau, "CreerPartieReseau");
					// Pour la synchro
					partie.connect((ICreerPartieReseau) UnicastRemoteObject
							.exportObject(partieReseau, 0));
					// On va sur la vue
					Vue.changeFenetre("CreerPartieReseau");
				}
			} catch (Exception e) {
				JOptionPane
						.showMessageDialog(
								new JFrame("Erreur"),
								"Aucune partie n'est créée sur ce serveur, modifiez l'adresse IP ou cliquez sur 'Créer une partie'");
			}
		}
	}
}